import Vue from 'vue'
import axios from 'axios'
import { Dialog, Notify } from 'vant'
import store from '@/store'

Vue.use(Notify)

const isDev = process.env.NODE_ENV === 'development'

// 创建请求实例
const instance = axios.create({
  baseURL: isDev ? '' : '',
  timeout: 60000
})

// 拦截器
// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    const { token } = store.state.user
    config.headers.token = token
    // config.headers.token = ...
    // loading = true
    // 一定要把config返回出去
    return config
  }, (error) => Promise.reject(error)
)

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    const { data, config } = response
    const { code, message } = data

    if (code === '200') {
      // 请求成功提示
      if (config.showTips) Notify({ type: 'success', message: 'success!' })
      return data.data
    } else {
      // 根据失败的不同的响应码做出不同的处理
      // 无token或token失效, 都去重新登录
      if (code === '10119') {
        Dialog.confirm({
          message: 'token失效, 登录超时',
          confirmButtonText: '去登录'
        }).then(() => { // 确定
          this.$router.push({ name: 'login' })
        })
      }
      // 请求失败提示
      if (config.showTips) Notify({ type: 'error', message })
      throw new Error(code)
    }
  }, (error) => Promise.reject(error)
)

export default instance
